/* 观察者 定义一个对象与其他对象之间的一种依赖关系 这个对象发生变化 其他依赖它的对象也会做出某种反应 */

const { eventNames } = require("process");


class MyEvent {
    constructor(){
        this.handles ={}
    }

    addEvent(eventName, fn){
        if(!this.handles[eventName]){
            this.handles[eventName] = [] ;
        }
        this.handles[eventName].push(fn) ;
    }
    remove(eventName, fn){
        if(!this.handles[eventName]){ return}
        let ind = this.handles[eventName].indexOf(fn) ; 
        if(ind!== -1) {
            this.handles[eventName].splice(ind, 1);
        }
    }
    trigger(eventName, ...args){
        if(!this.handles[eventName] || !this.handles[eventName].length){ return}
        this.handles[eventName].forEach((fn) => {
            fn(...args)
        })
    }
}